﻿#ifndef _AT_MQTT_H
#define _AT_MQTT_H

#define MQTT_MTU    0/*1500*/    /*noted by wangtao*/
#define TOPIC_LEN   64
#define CLIENTID_LEN    23
#define HOST_LEN    18
#define USERNAME_LEN    32
#define PASSWORK_LEN    64

#pragma pack(1)
typedef struct
{
    int client_idx;//客户端标识符
    char clientid[CLIENTID_LEN];//客户端标识符，规则mqtt_[imei]
    char hostname[HOST_LEN];  //服务器地址
    U16 port;   //服务器端口
    char username[USERNAME_LEN];    //用户名
    char password[PASSWORK_LEN];    //用户密码
    int pkt_timeout;   //连接超时时间,单位秒
    int retry_times;
    int keepalive;       //保活时间
    int cleansession;    //服务器是否清空会话, 0 存储该客户端的订阅消息 1 服务器必须删除之前保留的客户端任何消息， 此连接状态为“Clean”
    int lastWill;        //是否有遗嘱
    int recv_mode;    //0 字符串 1 十六进制
    int send_mode;    //0 字符串 1 十六进制
}ST_FASTCONN_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
    int pkt_timeout;   //连接超时时间,单位秒
    int retry_times;
    int keepalive;       //保活时间
    int cleansession;    //服务器是否清空会话, 0 存储该客户端的订阅消息 1 服务器必须删除之前保留的客户端任何消息， 此连接状态为“Clean”
    int lastWill;        //是否有遗嘱
    int recv_mode;    //0 字符串 1 十六进制
    int send_mode;    //0 字符串 1 十六进制
}ST_QMTCFG_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
    char *hostname;//mqtt服务器地址
    unsigned short port;//mqtt服务器端口
}ST_QMTOPEN_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
}ST_QMTCLOSE_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
    char clientid[CLIENTID_LEN];//客户端标识符，规则mqtt_[imei]
    char username[USERNAME_LEN];//用户名
    char password[PASSWORK_LEN];//密码
}ST_QMTCONN_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
}ST_QMTDISC_EVENT_PARA;

typedef struct
{
    char topic[TOPIC_LEN];//主题
    int qos;//订阅级别
}ST_TOPIC;

typedef struct
{
    int client_idx;//客户端标识符
    int msgid;//唯一标识一条消息
    ST_TOPIC *topics;//主题列表
    int topic_num;//主题个数
}ST_QMTSUB_EVENT_PARA;

typedef ST_QMTSUB_EVENT_PARA ST_QMTUNS_EVENT_PARA;

typedef struct
{
    int client_idx;//客户端标识符
    int msgid;//唯一标识一条消息
    int qos;//发送级别
    int retain;//服务器是否保存该消息
    char topic[TOPIC_LEN];//主题
    int length;//消息长度
    char payload[MQTT_MTU+1];//消息内容,字符串
}ST_QMTPUBEX_EVENT_PARA;

#pragma pack()

int Ec600sAT_FASTCONN(ST_FASTCONN_EVENT_PARA *para);
int Ec600sAT_QMTCFG(ST_QMTCFG_EVENT_PARA *para);
int Ec600sAT_QMTOPEN(ST_QMTOPEN_EVENT_PARA *para);
int Ec600sAT_QMTCLOSE(ST_QMTCLOSE_EVENT_PARA *para);
int Ec600sAT_QMTCONN(ST_QMTCONN_EVENT_PARA *para);
int Ec600sAT_QMTDISC(ST_QMTDISC_EVENT_PARA *para);
int Ec600sAT_QMTSUB(ST_QMTSUB_EVENT_PARA *para);
int Ec600sAT_QMTUNS(ST_QMTUNS_EVENT_PARA *para);
int Ec600sAT_QMTPUBEX(ST_QMTPUBEX_EVENT_PARA *para);
int Ec600sAT_CTRLZ();

#endif

